package com.smartfarm.domain.equipment;

import lombok.Builder;
import lombok.Data;

/**
 * 这个类用来记录农机设备（例如：拖拉机、收割机等）的当前状态
 * 指南：
 * 1. 这个类就像是一个设备的"体检表"，记录了设备现在的各种状态
 * 2. 比如：设备在哪里、油箱还有多少油、跑得有多快等等
 * 
 * 使用的两个注解说明：
 * @Data：这是一个很方便的注解，它会自动帮我们生成：
 *      - 获取每个属性的方法（getter）
 *      - 设置每个属性的方法（setter）
 *      - 判断两个对象是否相等的方法（equals）
 *      - 获取对象哈希值的方法（hashCode）
 *      
 * @Builder：这个注解让我们能用更简单的方式创建对象，比如：
 *      EquipmentStatus.builder()
 *          .equipmentId("拖拉机001")
 *          .speed(20.5)
 *          .build();
 */
@Data
@Builder(toBuilder = true)
public class EquipmentStatus {
    /**
     * 设备的唯一编号
     * 举例：比如"拖拉机001"这样的编号
     * 用途：用来区分不同的设备
     */
    private String equipmentId;      

    /**
     * 设备当前所在位置的纬度
     * 举例：北京的纬度大约是39.9042度
     * 用途：和经度一起用来确定设备在地图上的位置
     */
    private double latitude;         

    /**
     * 设备当前所在位置的经度
     * 举例：北京的经度大约是116.4074度
     * 用途：和纬度一起用来确定设备在地图上的位置
     */
    private double longitude;        

    /**
     * 设备当前的油量（以百分比表示）
     * 举例：100表示油箱是满的，50表示还剩一半
     * 用途：了解是否需要加油
     */
    private double fuelLevel;        

    /**
     * 设备当前的行驶速度
     * 单位：公里/小时
     * 举例：20.5表示每小时行驶20.5公里
     */
    private double speed;            

    /**
     * 当前工作任务的完成进度
     * 单位：百分比（0-100）
     * 举例：75.5表示任务完成了75.5%
     */
    private double workProgress;     

    /**
     * 设备的健康状况
     * 可能的值：例如"正常"、"需要维修"、"故障"等
     * 用途：了解设备是否需要维护或修理
     */
    private String healthStatus;     

    /**
     * 设备现在的操作方式
     * 可能的值："自动"或"手动"
     * 用途：知道设备是在自动运行还是有人在操作
     */
    private String operationMode;    

    /**
     * 设备当前正在执行的任务名称
     * 举例："水稻收割"、"玉米播种"等
     * 用途：了解设备现在在做什么工作
     */
    private String currentTask;      
    
    /**
     * 这个方法用来把设备的所有状态信息转换成易读的文字
     * 
     * 为什么要这样做：
     * 1. 方便查看设备的所有信息
     * 2. 把数据转换成人易读的格式
     * 3. 便于记录和显示
     * 
     * 使用示例：
     * EquipmentStatus status = ...;
     * System.out.println(status.toString());
     * 
     * 输出效果：
     * 设备状态{
     *   设备ID: 拖拉机001
     *   位置: (39.904200, 116.407400)
     *   ...其他信息...
     * }
     */
    @Override
    public String toString() {
        return String.format(
            "设备状态{\n" +
            "  设备ID: %s\n" +
            "  位置: (%.6f, %.6f)\n" +
            "  燃料: %.1f%%\n" +
            "  速度: %.1f 公里/小时\n" +
            "  进度: %.1f%%\n" +
            "  健康状态: %s\n" +
            "  运行模式: %s\n" +
            "  当前任务: %s\n" +
            "}",
            equipmentId, latitude, longitude, fuelLevel, speed, 
            workProgress, healthStatus, operationMode, currentTask);
    }
} 